package blog.generic

fun main(args: Array<String>) {
    fill(arrayOf(1), 2).joinToString().also(::println)
    copy(arrayOf(3, 2, 1), Array(3) {
        it
    }).joinToString().also(::println)
}

//实现一个 fill 函数，传入一个 Array 和一个对象，将对象填充到 Array 中，要求 Array 参数的泛型支持逆变（假设 Array size 为 1）
private fun <T> fill(arr: Array<in T>, t: T): Array<in T> {
    arr[0] = t
    return arr
}

//实现一个 copy 函数，传入两个 Array 参数，将一个 Array 中的元素复制到另外个 Array 中，要求 Array 参数的泛型分别支持协变和逆变。
// （提示：Kotlin 中的 for 循环如果要用索引，需要使用 Array.indices）
private fun <T> copy(arr1: Array<out T>, arr2: Array<in T>): Array<in T> {
    arr1.forEachIndexed { index, _ ->
        arr2[index] = arr1[index]
    }
    return arr2
}

